﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Diagnostics;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Tesis2.Models;

namespace Tesis2.Controllers
{
    public class UsuarioController : Controller
    {
        private TesisDBContext db = new TesisDBContext();

        //
        // GET: /Usuario/

        public ActionResult Index()
        {
            var usuarios = db.Usuarios.Include(u => u.EstadoUsuario).Include(u => u.PerfilUsuario);
            return View(usuarios.ToList());
        }

        public ActionResult List()
        {
            var usuarios = db.Usuarios.Include(u => u.EstadoUsuario).Include(u => u.PerfilUsuario);
            return View(usuarios.ToList());
        }

        public ActionResult Search()
        {
            ViewBag.EstadoUsuarioID = new SelectList(db.Parametros, "ParametroID", "Nombre");
            ViewBag.PerfilUsuarioID = new SelectList(db.Perfiles, "PerfilID", "Descripcion");
            return View();
        }

        //
        // GET: /Usuario/Details/5

        public ActionResult Details(int id = 0)
        {
            Usuario usuario = db.Usuarios.Find(id);
            if (usuario == null)
            {
                return HttpNotFound();
            }
            return View(usuario);
        }

        //
        // GET: /Usuario/Create

        public ActionResult Create()
        {
            ViewBag.EstadoUsuarioID = new SelectList(db.Parametros, "ParametroID", "Nombre");
            ViewBag.PerfilUsuarioID = new SelectList(db.Perfiles, "PerfilID", "Descripcion");
            return View();
        }

        //
        // POST: /Usuario/Create

        [HttpPost]
        public ActionResult Create(Usuario usuario)
        {
            if (ModelState.IsValid)
            {
                db.Usuarios.Add(usuario);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.EstadoUsuarioID = new SelectList(db.Parametros, "ParametroID", "Nombre", usuario.EstadoUsuarioID);
            ViewBag.PerfilUsuarioID = new SelectList(db.Perfiles, "PerfilID", "Descripcion", usuario.PerfilUsuarioID);
            return View(usuario);
        }

        //
        // GET: /Usuario/Edit/5

        public ActionResult Edit(int id = 0)
        {
            Usuario usuario = db.Usuarios.Find(id);
            if (usuario == null)
            {
                return HttpNotFound();
            }
            ViewBag.EstadoUsuarioID = new SelectList(db.Parametros, "ParametroID", "Nombre", usuario.EstadoUsuarioID);
            ViewBag.PerfilUsuarioID = new SelectList(db.Perfiles, "PerfilID", "Descripcion", usuario.PerfilUsuarioID);
            return View(usuario);
        }

        //
        // POST: /Usuario/Edit/5

        [HttpPost]
        public ActionResult Edit(Usuario usuario)
        {
            if (ModelState.IsValid)
            {
                db.Entry(usuario).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.EstadoUsuarioID = new SelectList(db.Parametros, "ParametroID", "Nombre", usuario.EstadoUsuarioID);
            ViewBag.PerfilUsuarioID = new SelectList(db.Perfiles, "PerfilID", "Descripcion", usuario.PerfilUsuarioID);
            return View(usuario);
        }

        //
        // GET: /Usuario/Delete/5

        public ActionResult Delete(int id = 0)
        {
            Usuario usuario = db.Usuarios.Find(id);
            if (usuario == null)
            {
                return HttpNotFound();
            }
            return View(usuario);
        }

        //
        // POST: /Usuario/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            Usuario usuario = db.Usuarios.Find(id);
            db.Usuarios.Remove(usuario);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        public ActionResult Login()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Login(Usuario usuario)
        {
            var userQry = from m in db.Usuarios
                            where ((string.IsNullOrEmpty(usuario.Nombre) ? true : m.Nombre.Equals(usuario.Nombre)))
                            select m;
            Usuario u = userQry.ToList().First();
            Session["Usuario"] = u;
            if (u.Contrasena.Equals(usuario.Contrasena))
            {
                Response.Write("Success");
                Session["usuario"] = u.UsuarioID;
                Debug.WriteLine(u.UsuarioID);
                List<PerfilXPrivilegio> perfilxprivilegio = new List<PerfilXPrivilegio>();
                //perfilxprivilegio = db.PerfilXPrivilegios.Include(p => p.PerfilPrivilegio).Where(p => p.PerfilPrivilegioID == u.PerfilUsuarioID).ToList();
                perfilxprivilegio = db.PerfilXPrivilegios.Where(p => p.PerfilPrivilegioID == u.PerfilUsuarioID).ToList();
                
                Session["perfilxprivilegio"] = perfilxprivilegio;
                List<Ventana> ventanas = new List<Ventana>();
                List<PrivilegioXVentana> privilegioxventana = new List<PrivilegioXVentana>();

                foreach(PerfilXPrivilegio pxp in perfilxprivilegio){
                    Debug.WriteLine(pxp.PerfilPrivilegioID);
                    Perfil pp = db.Perfiles.Where(p => p.PerfilID == pxp.PerfilPrivilegioID).ToList().First();
                    Debug.WriteLine(pp.Descripcion);
                    //privilegioxventana.AddRange(db.PrivilegioXVentanas.Include(p => p.VentanaPrivilegio).Where(p => p.PrivilegioVentanaID == pxp.PrivilegioPerfilID).ToList());
                    privilegioxventana.AddRange(db.PrivilegioXVentanas.Where(p => p.PrivilegioVentanaID == pxp.PrivilegioPerfilID).ToList());                
                }                

                foreach(PrivilegioXVentana pxv in privilegioxventana){
                    //ventanas.Add(pxv.VentanaPrivilegio);
                    ventanas.Add(db.Ventanas.Where(p => p.VentanaID == pxv.VentanaPrivilegioID).ToList().First());
                    Debug.WriteLine(pxv.VentanaPrivilegioID);
                    Ventana vent = new Ventana();
                    vent = db.Ventanas.Where(p => p.VentanaID == pxv.VentanaPrivilegioID).ToList().First();
                    Debug.WriteLine(vent.Descripcion);
                }
                Session["ventanas"] = ventanas;

                Console.WriteLine();
                ViewBag.Error = "";
                return RedirectToAction("Home", "Home");
            }

            string s = "Usuario y/o Contraseña incorrectos.";
            ViewBag.Error = s;
            return View(usuario);
        }

        public ActionResult Close()
        {
            return JavaScript("window.close();");
        }

        protected override void Dispose(bool disposing)
        {
            if (db != null)
            {
                db.Dispose();
                base.Dispose(disposing);
            }
        }
    }
}